package com.verlet.springbootdemo.spi;

import java.util.Iterator;
import java.util.ServiceLoader;

/**
 * @author verlet
 * @date 2022-10-11 22:54
 */
public class TestSpi {
    public static void main(String[] args) {
        // ServiceLoader不是实例化以后，就去读取配置文件中的具体实现，并进行实例化。
        ServiceLoader<Search> serviceLoader = ServiceLoader.load(Search.class);
        // 而是等到使用迭代器去遍历的时候，才会加载对应的配置文件去解析
        Iterator<Search> iterator = serviceLoader.iterator();
        // 调用hasNext方法的时候会去加载配置文件进行解析
        while (iterator.hasNext()) {
            // 调用next方法的时候进行实例化并缓存
            Search search = iterator.next();
            search.searchDoc("hello world!");
        }
        // 所有的配置文件只会加载一次，服务提供者也只会被实例化一次，重新加载配置文件可使用reload方法
    }
}
